package com.sgd.cli.example;

import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
import picocli.CommandLine.Parameters;

/**
 * 命令：需要实现 Runnable 接口或 Callable 接口
 *
 * name：命令名称
 * version：版本信息
 * mixinStandardHelpOptions：（true：可以给程序自动添加--help和--version选项）
 */
@Command(name = "ASCIIArt", version = "ASCIIArt 1.0", mixinStandardHelpOptions = true)
public class ASCIIArt implements Runnable {

    /**
     * 命令行选项
     *
     * names：选项名称
     * description：选项描述
     */
    @Option(names = {"-s", "--font-size"}, description = "Font size")
    int fontsize = 19;

    /**
     * 命令行参数
     *
     * paramLabel：在命令行参数帮助信息中，为该参数提供一个标签或描述
     * defaultValue：参数默认值
     * description：参数描述
     */
    @Parameters(paramLabel = "<word>", defaultValue = "Hello,picocli",
            description = "Words to be translated into ASCII art.")
    private String[] words = {"Hello,", "picocli"};


    /**
     * 命令被解析成功后调用
     */
    @Override
    public void run() {
        /**
         * 自己实现业务逻辑
         */
        System.out.println("fontsize " + fontsize);
        System.out.println("words " + String.join(",", words));
    }

    public static void main(String[] args) {
        // 通过CommandLine对象的execute方法来处理用户输入的命令
        int exitCode = new CommandLine(new ASCIIArt()).execute(args);
        System.exit(exitCode);
    }
}